// 布尔类型（Boolean） true false
var flag:boolean=true
flag = false

// 数字类型（number）
// var a:number = 123
// a = "string" 错误
// a = false 错误
// console.log(a)
// a = 12.3
// console.log(a)

// 字符串类型（string）
let str:string = "this is ts"
// str = 12 //错误
// str = false //错误
str = "你好ts"
console.log(str)

// 数组类型（array） ts中定义数组有两种方式

// es5  var arr = [1,'2323',false]

// 1.第一种定义数组的方法
// let arr:number[] = [1,2,3,4]
// console.log(arr)

// let arr:string[] = ["php","js","golang"]
// console.log(arr)

// 2.第二种定义数组的方式

// let arr:Array<number> = [11,23,44,55]
// console.log(arr)
// let arr:Array<string> = ["php","js","golang"]
// console.log(arr)

// 元组类型（tuple）  属于数组的一种

let arr:[string,number,boolean] = ["ts",3.18,true]
console.log(arr)

// 枚举类型
/*随着计算机的不断普及，程序不仅只用于数值计算还更广泛地处理非数值的数据。
例如：性别、月份、星期几、颜色、单位名、学历、职业等，都不是数值数据。
在其他程序设计语言中，一般用一个数值来代表某一状态，这种处理方法不直观，易读性差，
如果能在程序中用自然语言中有相应含义的单词来代表某一状态，则程序就很容易阅读和理解。
也就是说，事先考虑到某一变量可能取的值，尽量用自然语言中含义清楚的单词来表示它的每一个值，这种方法称为枚举方法，用这种方法定义的类型称枚举类型


*/
// enum Flag {success = 1,error = -1}
// var f:Flag = Flag.success
// console.log(f)
// console.log(Flag.error)

// enum Color {red,blue,orange}
// var c:Color = Color.orange
// console.log(c)

enum Color {red,blue=5,orange}
var c:Color = Color.orange
console.log(c)//orange == 6

// 任意类型（any）
// var num:any = 123
// num = 'str'
// num = true
// console.log(num)

// 任意类型的作用

var oBox:any = document.getElementById('box')
oBox.style.color = 'red'

// null 和 undefined  其他（never类型）数据类型的子类型

// var num:number;
// console.log(num)//输出，undefined  报错

// var num:undefined;
// console.log(num)//输出，undefined  正确

// var num:number | undefined;
// num = 123;
// console.log(num)

// 定义没有赋值
// var num:number | undefined;
// console.log(num)

// var num:null;
// num = null;

// 一个元素可能是 number类型 可能是null  可能是undefined

var num:number | null | undefined;
num = 1234;
console.log(num)


// void类型：typescript中的void表示没有任何类型，一般用于定义方法的时候方法没有返回值。

// es5的定义方法
// function run(){
//     console.log('run')
// }
// run()

// 表示方法没有返回任何类型
/*
function run():void{
    console.log('run')
}
run()
*/

// 错误写法
/*
function run():undefined{
    console.log('run')
}
run()
*/
// 正确写法
// function run():number{
//     return 123
// }
// run();

// never类型：是其他类型（包含null和undefined）的子类型，代表从不会出现的值。
// 这意味着声明never的变量只能被never类型所赋值

/*
var a:undefined;
a=undefined

var b:null;
b = null;
*/

var a:never;
// a=123;//错误的写法

a=(()=>{
    throw new Error('错误')
})()




